package com.zcb.rxjavapractice.activity;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;

import com.jakewharton.rxbinding.widget.RxTextView;
import com.jakewharton.rxbinding.widget.TextViewTextChangeEvent;
import com.zcb.rxjavapractice.R;

import java.util.concurrent.TimeUnit;

import rx.Observable;
import rx.Observer;
import rx.Subscription;
import rx.functions.Action1;
import rx.functions.Func1;
import rx.functions.Func2;
import rx.functions.Func3;

/**
 * 此代码参考资料：
 * http://www.jianshu.com/p/79cb4e1c9771
 *
 *
 *
 *
 *
 *1.combineLatest操作符把两个Observable产生的结果进行合并，合并的结果组成一个新的Observable。下面的栗子是ob2中的每一个数据项都与ob1中的最后一项进行相加，将生成的结果组成一个新的Observable对象.
 *combineLatest操作符可以接受2-9个Observable作为参数，最后一个Observable中的每一个数据项，都与前面Observable中的最后一项进行规则运算。也就是call方法中的最后一个值参数是最后一个Observable的每一项数据，
 *前面的参数是前面每一个Observable的最后一项数据，固定不变的。
 *combineLatest(List,FuncN)操作符可以接受一个Observable的list集合，集合中最后一个Observable中的每一项数据，会跟前面每一个Observable对象的最后一项数据进行规则运算
 *默认不在任何特定的调度器上执行。
 *
 *
 *
 */

public class SkipAndComblineLatestActivity extends AppCompatActivity {


    private EditText userNameET;
    private ImageView username_img;

    private EditText pwdET;
    private ImageView pwd_img;

    private Button finish_btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_skip_and_combline_latest);

        userNameET= (EditText) findViewById(R.id.username_et);
        username_img= (ImageView) findViewById(R.id.username_input_result_img);

        pwdET= (EditText) findViewById(R.id.pwd_et);
        pwd_img= (ImageView) findViewById(R.id.pwd_input_result_img);

        finish_btn= (Button) findViewById(R.id.finish_btn);

        combineLatestEvent();
        checkInput();
    }
        //检查用户名长度是否合法
        //RxTextView.textChangeEvents()可以监听内容的变化
    private void checkInput(){
        Observable<TextViewTextChangeEvent> usernameObservable= RxTextView.textChangeEvents(userNameET);
        usernameObservable
                .map(new Func1<TextViewTextChangeEvent, Boolean>() {
                    @Override
                    public Boolean call(TextViewTextChangeEvent textViewTextChangeEvent) {
                        //如果输入内容不为空，且成都大于6
                        Boolean res=!TextUtils.isEmpty(textViewTextChangeEvent.text())&&(textViewTextChangeEvent.text().length()>6);
                        return res;
                    }
                })
                .subscribe(new Action1<Boolean>() {
                    @Override
                    public void call(Boolean o) {
                        if (o){
                            username_img.setImageResource(R.drawable.input_right);
                        }else{
                            username_img.setImageResource(R.drawable.input_wrong);
                        }
                    }
                });
    }







            //合并订阅，设置按钮可点击性
    private void combineLatestEvent(){
        Observable<CharSequence> usernameObservable= RxTextView.textChanges(userNameET).skip(1);
        Observable<CharSequence> pwdObservable= RxTextView.textChanges(pwdET).skip(1);

        Observable.combineLatest(usernameObservable,pwdObservable,
                new Func2<CharSequence,CharSequence,Boolean>(){

                    @Override
                    public Boolean call(CharSequence username,CharSequence pwd) {
                        //这里进行定义合并的规则，合并处理对象username和pwd，然后返回一个处理后的结果。

                        Boolean isUserName= !TextUtils.isEmpty(username)&&(userNameET.getText().toString().length()>6);
                        Boolean isPwd= !TextUtils.isEmpty(pwd)&&(pwdET.getText().toString().length()>6);

                        return isUserName&&isPwd;
                    }
                }
        ).subscribe(getObserver());

    }

    private Observer<Boolean> getObserver(){
        return new Observer<Boolean>(){

            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Boolean aBoolean) {
                //更改状态
                if (aBoolean)
                finish_btn.setVisibility(View.VISIBLE);
                else
                finish_btn.setVisibility(View.GONE);
            }
        };
    }



}
